package crypto

import (
	"crypto/md5"
	"encoding/hex"
)

/**
 * Md5，获取字符串的 MD5 加密 32 位长度结果，支持传入多个子字符串自动拼接完整字符串进行 MD5 加密
 * Params：
 *   str：代加密的第一个子字符串
 *   more：更多子字符串
 * Return：
 *   MD5 加密后的 32 位字符串结果
 */
func Md5(str string, more ...string) string {
	ctx := md5.New()
	ctx.Write([]byte(str))

	if more != nil {
		for _, v := range more {
			ctx.Write([]byte(v))
		}
	}

	return hex.EncodeToString(ctx.Sum(nil))
}

/**
 * Md5Encode16，获取字符串的 MD5 加密的 16 位长度结果，支持传入多个子字符串自动拼接完整字符串进行 MD5 加密
 * Params：
 *   str：待加密的第一个子字符串
 *   more：更多子字符串
 * Return：
 *   MD5 加密后的 16 位字符串结果
 */
func Md5Encode16(str string, more ...string) string {
	res := Md5(str, more...)
	return res[8:24]
}
